home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / adatimer.zip / TIMEL3.ADA < prev    next >
Text File  |  1990-06-07  |  3KB  |  112 lines

  1. --             PTD.ada
  2.  
  3. with POLLED_TIMER;
  4. with DIM_FLOAT, ASCII_UTILITIES;
  5.   -- DIM_FLOAT and ASCII_UTILITIES are
  6.   -- from Ada in Action by Do-While Jones,
  7.   -- John Wiley & Sons, Inc.
  8. with TEXT_IO;
  9. procedure Polled_Timer_Demo is
  10.  
  11.   I : integer := 0;
  12.  
  13.   type Seconds is new DIM_FLOAT.Units;
  14.  
  15.   USED, LEFT : Seconds;
  16.   LEFT1, LEFT2, LEFT3, LEFT4 : Seconds;
  17.  
  18.   package TIMER is new POLLED_TIMER(Seconds);
  19.  
  20.   procedure Put(MSEC : Seconds) is
  21.   begin
  22.     -- Multiply by 1000 to show milliseconds.
  23.     TEXT_IO.Put(ASCII_UTILITIES.Fixed_Image
  24.       (Dimensionless(MSEC) * 1000.0));
  25.   end Put;
  26.  
  27. begin
  28.   TEXT_IO.Put_Line("Fast Polled Timer Demo");
  29.  
  30.   -- Show single mode
  31.   TIMER.Set(+0.050,TIMER.SINGLE);
  32.   TEXT_IO.Put_Line("Starting 50 msec timer.");
  33.   TIMER.Start;
  34.   TIMER.Stop;
  35.   LEFT := TIMER.Time_Left;
  36.   Put(LEFT); TEXT_IO.Put_Line(" msec left.");
  37.  
  38.   TIMER.Start;
  39.   TEXT_IO.Put_Line
  40.     ("Let's see how long it took to write this line.");
  41.   TIMER.Stop;
  42.   USED := TIMER.Time_Used;
  43.   Put(USED); TEXT_IO.Put_Line(" msec used.");
  44.  
  45.   TEXT_IO.Put_Line
  46.     ("Resetting the timer.");
  47.   TIMER.Restart;
  48.   TIMER.Stop;
  49.   LEFT := TIMER.Time_Left;
  50.   Put(LEFT); TEXT_IO.Put_Line(" msec left.");
  51.  
  52.   TEXT_IO.Put_Line("Looping until the timer expires.");
  53.   TIMER.Start;
  54.   I := 0;
  55.   while not TIMER.Has_Expired loop
  56.     I := I+1;
  57.   end loop;
  58.   TEXT_IO.Put_Line("Timer expired after" &
  59.     integer'IMAGE(i) & " loops.");
  60.  
  61.   -- Show reset and read-on-the-fly
  62.   TEXT_IO.Put_Line("Reading the timer on the fly.");
  63.   TIMER.Restart;
  64.   LEFT1 := TIMER.Time_Left;
  65.   LEFT2 := TIMER.Time_Left;
  66.   LEFT3 := TIMER.Time_Left;
  67.   LEFT4 := TIMER.Time_Left;
  68.   Put(LEFT1); TEXT_IO.Put_Line(" msec left.");
  69.   Put(LEFT2); TEXT_IO.Put_Line(" msec left.");
  70.   Put(LEFT3); TEXT_IO.Put_Line(" msec left.");
  71.   Put(LEFT4); TEXT_IO.Put_Line(" msec left.");
  72.  
  73.   -- Show Stop and read while stopped.
  74.   TEXT_IO.Put_Line("Reading the timer when stopped.");
  75.   TEXT_IO.Put_Line("50 msec timer started.");
  76.   TIMER.Restart;
  77.   TIMER.Stop;
  78.   TEXT_IO.Put_Line("Stopped as soon as possible.");
  79.   USED := TIMER.Time_Used;
  80.   LEFT := TIMER.Time_Left;
  81.   Put(USED); TEXT_IO.Put_Line(" msec used.");
  82.   Put(LEFT); TEXT_IO.Put_Line(" msec left.");
  83.   TEXT_IO.Put_Line("1 second later.");
  84.   Delay(1.0);
  85.   USED := TIMER.Time_Used;
  86.   LEFT := TIMER.Time_Left;
  87.   Put(USED); TEXT_IO.Put_Line(" msec used.");
  88.   Put(LEFT); TEXT_IO.Put_Line(" msec left.");
  89.   TIMER.Start;
  90.   TIMER.Stop;
  91.   TEXT_IO.Put_Line("Let it run momentarily.");
  92.   USED := TIMER.Time_Used;
  93.   LEFT := TIMER.Time_Left;
  94.   Put(USED); TEXT_IO.Put_Line(" msec used.");
  95.   Put(LEFT); TEXT_IO.Put_Line(" msec left.");
  96.  
  97.   -- Show repeat mode
  98.   TIMER.Set(+0.05,TIMER.REPEATED);
  99.   TEXT_IO.Put_Line
  100.     ("Watching 1 second timer for 5 seconds.");
  101.   TIMER.Start;
  102.   for i in 1..5 loop
  103.     for j in 1..20 loop -- 20 * 50 msec = 1 sec
  104.       while not TIMER.Has_Expired loop null; end loop;
  105.     end loop;
  106.     TEXT_IO.Put_Line(" Tick");
  107.   end loop;
  108.   TIMER.Stop;
  109.   TEXT_IO.New_Line;
  110.   TEXT_IO.Put_Line("Done.");
  111. end Polled_Timer_Demo;
  112.